﻿///////////////////////////////////////////////////////////////////////////////
// File:        Sha1.hpp
// Author:      671643387@qq.com
// Date:        2016年1月5日 下午5:47:52
// Description:
///////////////////////////////////////////////////////////////////////////////

#ifndef CRYPTO_SHA1_HPP_
#define CRYPTO_SHA1_HPP_

#if defined(_MSC_VER) && (_MSC_VER >= 1200)
# pragma once
#endif

#include <string>
#include <openssl/sha.h>
#include <openssl/crypto.h>
#include <fog/Typedef.hpp>

namespace fog
{
    namespace crypt
    {
        class BigNumber;

        class Sha1Hash
        {
        public:
            Sha1Hash(void);
            ~Sha1Hash(void);

        public:
            void initialize(void);
            void finalize(void);

            void updateBigNumbers(BigNumber*, ...);
            void updateData(const BYTE_t*, std::size_t);
            void updateData(const std::string&);

            const BYTE_t* getDigest(void) const { return &mDigest[0]; }
            int getLength(void) const { return SHA_DIGEST_LENGTH; }

        private:
            SHA_CTX     mC_;
            BYTE_t      mDigest[SHA_DIGEST_LENGTH];
        };
    }
}

#endif /* CRYPTO_SHA1_HPP_ */
